<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Lysee Reference Manual - Develop web site</title>
<link href="index.css" rel="stylesheet" type="text/css">
<link href="logo.ico" rel="Shortcut Icon">
</head>
<body> 
<table width="760" border="0" align="center" cellpadding="0" cellspacing="8"> 
  <tr> 
    <td align="left" valign="middle"> <table width="100%"  border="0" cellspacing="0" cellpadding="0"> 
        <tr> 
          <td align="left" valign="top"><a href="index.html"><img src="logo.png" width="490" height="70" border="0"></a></td> 
        <td align="right" valign="bottom"><a href="403.html">&lt;PREV</a>&nbsp;&nbsp;<a href="index.html">HOME</a>&nbsp;&nbsp;<a href="501.html">NEXT&gt;</a></td>
        </tr> 
      </table></td> 
  </tr> 
  <tr> 
    <td class="footer_line"><strong><strong>4.3 <a href="index.html">Lysee Reference Manual</a> - </strong><a href="300.html"></a></strong><a href="400.html">Developments</a> - Develop Web Site <br>
      <br>
This page will tell you what is LSP and how to develop active web site with it.<br> 
        <br> 
        LSP means <strong>L</strong>ysee <strong>S</strong>cript <strong>P</strong>age. In most cases, LSP file is HTML file where lysee script was embeded.加入 Lysee 代码的 HTML 页面统称为 LSP（<strong>L</strong>ysee <strong>S</strong>cript <strong>P</strong>age)，缺省的文件后缀名为“.lsp”，换局话说，LSP 就是加入了 Lysee 代码的 HTML 文件，这些代码可以为你做任何你想做的事情。LSP 文件的生成和修改与普通 HTML 文件完全一样，可以用你习惯的页面设计工具（DreamWave, FrontPage, Composer, CoffeeCup, HotDog, ...）来建立和编辑它们。<br> 
        <br> 
        本教程假设用户的服务器已经安装并运行了 Lysee，且所有以 .lsp 结尾的文件都配置为由 Lysee 来处理。我们即将要做的就是试着编写一些 LSP 文件，并将它们放置在服务器上有效的 web 目录中，之外没有任何其它多余的操作。服务器将自动解析这些文件。<br> 
        <br> 
    为方便学习和开发，你可以试着把自己的机器改装为 HTTP 服务器，这样做只需安装 Lysee 和一个 HTTP 服务器（Abyss, Apache, Lighttpd, ...）就行了，必要时还可以安装一个 SQL 数据库系统（PostgreSQL, FireBird, MySQL, ...）。 </td></tr> 
  <tr> 
    <td><strong><a name="first_lsp"></a>第一个 LSP 页面</strong><br> 
      <br> 
      在 web 服务器根目录下建立一个文件名为 hello.lsp 的文本文件，然后将下面的 HTML 代码粘贴进去并予以保存：<br> 
      <br> 
      <table width="0%"  border="0" align="center" cellpadding="6" cellspacing="0"> 
        <tr> 
          <td class="menu10_white">&lt;html&gt; <br> 
&lt;head&gt; <br> 
&lt;title&gt;Hello World&lt;/title&gt; <br> 
&lt;/head&gt; <br> 
&lt;body&gt; <br>            <strong>{: = &quot;Hello World&quot; :} </strong><br> 
&lt;/body&gt; <br> 
&lt;/html&gt;</td> 
        </tr> 
      </table> 
      <br> 
      <strong>说明:</strong> 加粗部分为 LSP 代码，标签“{:”和“:}”（或者“&lt;!--{:”和“:}--&gt;”）之间是实际执行的代码，LSP 代码执行完毕后将被其输出的内容所取代。<br> 
      <br> 
      在浏览器的地址栏里按以下格式输入 hello.lsp 文件的链接地址并按回车键：<br> 
      <br> 
&nbsp;&nbsp;&nbsp;&nbsp;http://<strong>www.myserver.com</strong>/hello.lsp<br> 
      <br> 
      <strong>www.myserver.com</strong> 为测试服务器的地址，如果是本地开发，将其替换为 localhost 或 127.0.0.1 即可：<br> 
      <br> 
&nbsp;&nbsp;&nbsp;&nbsp;http://localhost/hello.lsp<br> 
&nbsp;&nbsp;&nbsp;&nbsp;http://127.0.0.1/hello.lsp<br> 
      <br> 
      如无意外，服务器将调用 Lysee 解析文件 hello.lsp 并通过浏览器显示输出结果：<br> 
      <br> 
      <table width="0%"  border="0" align="center" cellpadding="6" cellspacing="0"> 
        <tr> 
          <td class="menu10_white">&lt;html&gt; <br> 
&lt;head&gt; <br> 
&lt;title&gt;Hello World&lt;/title&gt; <br> 
&lt;/head&gt; <br> 
&lt;body&gt; <br>            Hello World<br> 
&lt;/body&gt; <br> 
&lt;/html&gt;</td> 
        </tr> 
      </table> 
      <br> 
    hello.lsp 非常简单，它只是用 Lysee 的输出符号 “=” 打印了字符串“Hello World”，但这个例子完整展示了 LSP 的处理流程和模式，即用 LSP 代码的输出替换代码本身，其它内容原样输出，从而达到动态生成网页的目的。LSP 文件的解析的整个过程完全是由服务器在后台控制并完成的，服务器知道要将 .lsp 结尾的文件交给 Lysee 处理，就像服务器知道要将 .php 文件传递给 PHP 处理一样。</td> 
  </tr> 
  <tr> 
    <td><a name="offen_used"></a><strong>最常用，最实用，必须掌握的脚本</strong><br> 
      <br> 
      1、打印服务器传送的 LSP 参数。 参数分两种，一种是页面（表单）请求的参数，存放在 <strong>__vals__</strong> 字符串列表中，一种是请求的描述信息，存放在 <strong>__envs__</strong> 字符串列表中，让我们把它们打印出来。<br> 
      <br> 
      <table width="0%"  border="0" align="center" cellpadding="6" cellspacing="0"> 
        <tr> 
          <td>{：<br> 
            = <strong>__vals__</strong>.text.html(), <strong>__envs__</strong>.text.html();<br> 
          ：}</td> 
        </tr> 
      </table> 
      <br> 
      说明： text 属性返回字符串列表的完整内容，原字符串间用换行符分隔。html() 则将取回的字符串编码为规范的 HTML 代码。<br> 
      <br> 
      2、打印保存着访问者浏览器信息的 HTTP_USER_AGENT 参数。HTTP_USER_AGENT 参数保存在 <strong>__envs__</strong> 列表中，有三种表达方法。<br> 
      <br> 
      <table width="0%"  border="0" align="center" cellpadding="6" cellspacing="0"> 
        <tr> 
          <td valign="middle">1.</td> 
          <td>{：<br>
  = <strong>__envs__</strong>.read(&quot;HTTP_USER_AGENT&quot;);<br> 
          ：}</td> 
        </tr> 
        <tr> 
          <td valign="middle">2.</td> 
          <td>{：<br> 
            = <strong>__envs__</strong>.HTTP_USER_AGENT;<br> 
          ：}</td> 
        </tr> 
        <tr> 
          <td valign="middle">3.</td> 
          <td>{：<br> 
            = ${HTTP_USER_AGENT};<br> 
          ：}</td> 
        </tr> 
      </table> 
      <br>      
      ${HTTP_USER_AGENT} 是一种兼容 UNIX Shell 环境变量的表达模式，${} 表示取环境变量值，中间的标识符为要取值的环境变量名称。在 Lysee 中 ${} 不仅可以读取环境变量的值，而且可以读取 CGI 请求参数 <strong>__vals__ </strong>的值，以及 Lysee 内核的配置参数。<br> 
      <br> 
      3、判断访问者浏览器是否是 IE。 <br> 
      <br> 
      <table width="0%"  border="0" align="center" cellpadding="6" cellspacing="0"> 
        <tr> 
          <td>{:<br>
            <strong>if</strong> ${HTTP_USER_AGENT}.pos(&quot;MSIE&quot;) &gt;= 0 <strong>then</strong><br>
&nbsp;&nbsp;= &quot;you are using Internet Explorer&quot;;<br> 
          <strong>end</strong><br>
          :}</td> 
        </tr> 
      </table> 
      <br> 
      4、嵌套混合 HTML 和 LSP 代码，判断访问者浏览器是否是 IE。 <br> 
      <br> 
      <table width="0%"  border="0" align="center" cellpadding="6" cellspacing="0"> 
        <tr> 
          <td>I guess:<br> 
            {: <strong>if</strong> ${HTTP_USER_AGENT}.pos(&quot;MSIE&quot;) &gt;= 0 <strong>then</strong> :}<br> 
&nbsp;&nbsp;you are using Internet Explorer<br> 
{: <strong>else</strong> :} <br> 
&nbsp;&nbsp;Maybe you are using FireFox<br> 
            {: <strong>end</strong> :}<br> 
            is it right?</td> 
        </tr> 
    </table>    </td>
  </tr> 
  <tr> 
    <td><strong><a name="form_lsp"></a>表单处理</strong><br> 
      <br> 
      表单处理是动态页面开发必须掌握的基本技术，提取并使用表单元素值本身是一个非常烦琐复杂的过程，但在 LSP 中这不是问题，Lysee 能用最简单的表达方式为您解决这个问题。在 LSP 解析的过程中，Lysee 自动把表单元素的值存入 __vals__ 字符串列表，并在元素名前统一加“request.”前缀，这样您只虚按照“${request.ElementName}”的格式就能引用任意一个表单元素值了。让我们看一段示例代码：<br> 
      <br> 
      <table width="0%"  border="0" align="center" cellpadding="6" cellspacing="0"> 
        <tr> 
          <td nowrap class="menu10_white">&lt;html&gt; <br> 
&lt;head&gt; <br> 
&lt;title&gt;input name and age&lt;/title&gt; <br> 
&lt;/head&gt; <br> 
&lt;body&gt; <br>            &lt;form action=&quot;nameage.lsp&quot; method=&quot;GET&quot;&gt;<br>&lt;p&gt;your name &lt;input type=&quot;text&quot; name=&quot;name&quot; /&gt;&lt;/p&gt;<br>&lt;p&gt;your age &lt;input type=&quot;text&quot; name=&quot;age&quot; /&gt;&lt;/p&gt;<br>&lt;p&gt;&lt;input type=&quot;submit&quot; /&gt;&lt;/p&gt;<br>&lt;/form&gt;<br> 
&lt;/body&gt; <br> 
&lt;/html&gt;</td> 
        </tr> 
      </table> 
      <br> 
      当用户填写完表单并点击 submit 按钮后，页面 nameage.lsp 将被调用处理此表单的请求：<br> 
      <br> 
      <table width="0%"  border="0" align="center" cellpadding="6" cellspacing="0"> 
        <tr> 
          <td valign="middle" nowrap>1.</td> 
          <td nowrap class="menu10_white">&lt;html&gt; <br> 
&lt;head&gt; <br> 
&lt;title&gt;display name and age&lt;/title&gt; <br> 
&lt;/head&gt; <br> 
&lt;body&gt; Hi! {:=${request.name}:}, I know you are {:=${request.age}:} years old.<br> 
&lt;/body&gt; <br> 
&lt;/html&gt;</td> 
        </tr> 
        <tr> 
          <td valign="middle" nowrap>2.</td> 
          <td nowrap class="menu10_white">&lt;html&gt; <br> 
&lt;head&gt; <br> 
&lt;title&gt;display name and age&lt;/title&gt; <br> 
&lt;/head&gt; <br> 
&lt;body&gt;<br> 
            &lt;!--{:=@&quot;Hi! %{request.name}, I know you are %{request.age} years old.&quot;:}--&gt;<br> 
&lt;/body&gt; <br> 
&lt;/html&gt;</td> 
        </tr> 
      </table> 
      <br> 
      我把我的信息输进去，得到的结果是:<br> 
      <br> 
      <table width="0%"  border="0" align="center" cellpadding="6" cellspacing="0"> 
        <tr> 
          <td nowrap class="menu10_white">&lt;html&gt; <br> 
&lt;head&gt; <br> 
&lt;title&gt;display name and age&lt;/title&gt; <br> 
&lt;/head&gt; <br> 
&lt;body&gt; <br> 
            Hi! budi, I know you are 37 years old.<br> 
&lt;/body&gt; <br> 
&lt;/html&gt;</td> 
        </tr> 
      </table> 
      <br> 
    说明：nameage.lsp 的第二种编码使用了格式化字符串操作符“@”，在格式化字符串的处理过程中，标记 %{} 表示取环境变量值，标记中间的内容为环境变量名称。</td> 
  </tr> 
  <tr> 
    <td><a name="upload_file"></a><strong>向服务器上传文件</strong><br>      
      <br> 
      向服务器上传文件其实也是表单处理的一部分，但与普通表单不同的是采用了“multipart/form-data”的编码方式，鉴于文件上传的特殊性有必要单独提出来讲一下。在处理“multipart/form-data”表单时，Lysee 自动将上传的文件保存到 ${tmpath} 目录，并将临时文件名与原始文件名捆绑在一起存储到 <strong>__vals__</strong> 列表中供 LSP 代码使用。看下面这个例子：<br> 
      <br> 
      <table width="0%"  border="0" align="center" cellpadding="6" cellspacing="0"> 
        <tr> 
          <td nowrap class="menu10_white">&lt;html&gt; <br> 
&lt;head&gt; <br> 
&lt;title&gt;upload album picture &lt;/title&gt; <br> 
&lt;/head&gt; <br> 
&lt;body&gt; <br>&lt;form action=&quot;album.lsp&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt;<br>
Picture: &lt;br&gt;<br>&lt;input type=&quot;file&quot; name=&quot;eImage&quot; size=&quot;24&quot;&gt;&lt;br&gt;<br>&lt;input type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;Upload&quot;&gt;<br>&lt;/form&gt;<span class="lsp_code"><br> 
            </span>&lt;/body&gt; <br> 
&lt;/html&gt;</td> 
        </tr> 
      </table> 
      <br> 
      选择照片文件并按下 Upload 按钮后，album.lsp 将上传的照片转存储到 d:\album 目录下。<br> 
      <br> 
      <table width="0%"  border="0" align="center" cellpadding="6" cellspacing="0"> 
        <tr> 
          <td nowrap class="menu10_white">&lt;html&gt; <br> 
&lt;head&gt; <br> 
&lt;title&gt;save album picture &lt;/title&gt; <br> 
&lt;/head&gt; <br> 
&lt;body&gt; <br> 
            &lt;!--{:<br> 
            f_src = ${tmpath} + ${request.eImage--&gt;file};<br> 
            <strong>if</strong> sys::isfile(f_src) <strong>then</strong><br>
&nbsp;&nbsp;f_dst = R&quot;d:\album\&quot; + ${request.eImage-&gt;file};<br>
&nbsp;&nbsp;<strong>if</strong> sys::cp(f_src, f_dst, true) <strong>then</strong> <br>
&nbsp;&nbsp;&nbsp;&nbsp;= &quot;Picture Saved!&quot;;<br>
            &nbsp;&nbsp;<strong>end</strong><br>
            <strong>end</strong><br>
            :}--&gt;<br>            &lt;/body&gt; <br> 
&lt;/html&gt;</td> 
        </tr> 
    </table>      </td> 
  </tr> 
  <tr> 
    <td align="right" class="footer_line"><a href="403.html">&lt;PREV</a>&nbsp;&nbsp;<a href="index.html">HOME</a>&nbsp;&nbsp;<a href="501.html">NEXT&gt;</a></td> 
  </tr> 
</table> 
</body>
</html>
